from django.db import models
import uuid
import re
# Create your models here.
"""
Django 数据库迁移命令: 
python manage.py makemigrations
python manage.py migrate
.venv\Scripts\activate
"""

# 平台信息
class PlatformInfo(models.Model):
    error_message = {
        "required": "不能为空",
        "blank": "不能为空",
        "invalid": "格式错误",
    }
    # 平台编号
    platform_id = models.CharField(max_length=100, verbose_name="平台编号", error_messages=error_message, primary_key=True)
    # 平台名称
    name = models.CharField(max_length=100, verbose_name="平台名称", error_messages=error_message)
    # 平台logo
    logo = models.FileField(
        upload_to='platform_logo/',
        verbose_name="平台logo",
        null=True,
        blank=True,
    )
    # 平台描述
    description = models.TextField(
        verbose_name="平台描述",
        null=True,
        blank=True,
    )
    
    # 平台创建时间
    create_time = models.DateTimeField(
        verbose_name="平台创建时间",
        auto_now_add=True,
    )
    # 平台更新时间
    update_time = models.DateTimeField(
        verbose_name="平台更新时间",
        auto_now=True,
    )
    
    def __str__(self):
        return self.name
    
    def save(self, *args, **kwargs):
        if not self.platform_id:
            self.platform_id = str(uuid.uuid4())
        super().save(*args, **kwargs)
  

# --------------------------V1--------------------------

# 平台用户
class PlatformUser(models.Model):
    error_message = {
        "required": "不能为空",
        "blank": "不能为空",
        "invalid": "格式错误",
    }
    # 用户对应的平台
    platform = models.ForeignKey(PlatformInfo, on_delete=models.CASCADE, verbose_name="平台", error_messages=error_message)


    # 用户id
    user_id = models.CharField(max_length=100, verbose_name="用户id", error_messages=error_message, primary_key=True)

    # 用户账号
    account = models.CharField(max_length=100, verbose_name="用户账号", error_messages=error_message, unique=True, default="123456")
    # 用户密码
    password = models.CharField(max_length=100, verbose_name="用户密码", error_messages=error_message)

    # 用户头像
    avatar = models.FileField(
        upload_to='platform_user_avatar/',
        verbose_name="用户头像",
        null=True,
        blank=True,
    )

    # 用户创建时间
    create_time = models.DateTimeField(
        verbose_name="用户创建时间",
        auto_now_add=True,
    )

    # 用户更新时间
    update_time = models.DateTimeField(
        verbose_name="用户更新时间",
        auto_now=True,
    )


    def save(self, *args, **kwargs):
        if not self.user_id:
            self.user_id = str(uuid.uuid4())
        # 用户密码只能存在6-12位,并且只能是大小写英文、数字、@符号
        if not re.match(r'^[a-zA-Z0-9@]{6,12}$', self.password):
            raise ValueError("用户密码只能存在6-12位,并且只能是大小写英文、数字、@符号")
        # 用户账号只能是6-11位数，只能是数字
        if not re.match(r'^\d{6,11}$', self.account):
            raise ValueError("用户账号只能是6-11位数，只能是数字")
        super().save(*args, **kwargs)

# --------------------------V1--------------------------

# 平台用户-v2
class PlatformUserV2(models.Model):
    # 用户id
    user_id = models.CharField(max_length=100, verbose_name="用户id", primary_key=True)
    # 用户账号
    account = models.CharField(max_length=100, verbose_name="用户账号", unique=True)
    # 用户密码
    password = models.CharField(max_length=100, verbose_name="用户密码")
    # 用户创建时间
    create_time = models.DateTimeField(
        verbose_name="用户创建时间",
        auto_now_add=True,
        null=True,
        blank=True,
    )
    # 用户更新时间
    update_time = models.DateTimeField(
        verbose_name="用户更新时间",
        auto_now=True,
        null=True,
        blank=True,
    )
    
    def save(self, *args, **kwargs):
        if not self.user_id:
            self.user_id = str(uuid.uuid4())
        super().save(*args, **kwargs)
